{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "aa3ef033-63ff-4c80-99cd-8f575b0509ba",
   "metadata": {},
   "source": [
    "# Testing PIDs\n",
    "\n",
    "This notebook is for visual debugging of PID controllers. The PID controllers are built into Python libraries using a simple emulation layer for Arduino. The emulation layer can be found in the `emulation/` directory. Since PID controllers don't touch hardware it's really easy to compile them. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "74926301-5e15-435a-820b-b4b8fb261547",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CFLAGS=\"-std=c++11 -DARDUINO=100 -I autopid_lib -Iemulation\" python3 autopid_builder.py \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/home/maximus/Arduino/libs/FastPID/test/autopid_builder.py:3: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives\n",
      "  import distutils.sysconfig\n",
      "/home/maximus/Arduino/libs/FastPID/test/autopid_builder.py:3: DeprecationWarning: The distutils.sysconfig module is deprecated, use sysconfig instead\n",
      "  import distutils.sysconfig\n",
      "running install\n",
      "running build\n",
      "running build_ext\n",
      "running install_lib\n",
      "running install_egg_info\n",
      "Removing ./AutoPID-1.0.egg-info\n",
      "Writing ./AutoPID-1.0.egg-info\n"
     ]
    }
   ],
   "source": [
    "!make"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b4bd814f-c2e7-472a-8280-414808675788",
   "metadata": {},
   "source": [
    "Once built the four PIDs that can be compared are importable:\n",
    "\n",
    "| Name | Notes | URL |\n",
    "| --- | --- | --- | \n",
    "| `FastPID` | This implementation | https://github.com/mike-matera/FastPID | \n",
    "| `ArduinoPID` | The *gold standard* for Arduino PID controllers, uses `float` math.  | https://github.com/br3ttb/Arduino-PID-Library | \n",
    "| `AutoPID` | A PID library for Arduino has some problems. | https://github.com/r-downing/AutoPID | \n",
    "| `refpid` | A reference PID implementation written in Python | | \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b21d344b-f28c-445a-8032-50509a2f6166",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import FastPID\n",
    "import ArduinoPID\n",
    "import AutoPID\n",
    "import refpid\n",
    "\n",
    "from ipywidgets import interact"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8e79b3ae-feba-4b38-8ae2-3fc47393dee6",
   "metadata": {},
   "source": [
    "## Test Infrastructure \n",
    "\n",
    "This diagram of a PID controller is from [Wikipedia](https://en.wikipedia.org/wiki/PID_controller). It shows a system diagram. This document refers to parts of the system using the names in the diagram.\n",
    "\n",
    "![](https://upload.wikimedia.org/wikipedia/commons/thumb/4/43/PID_en.svg/600px-PID_en.svg.png?20160622101044)\n",
    "\n",
    "The next cell implements a discreet plant process. The process is a \"leaky bucket\". It's value tends toward zero based on it's sole parameter. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "5f492a42-c699-48ee-b671-fade5c325318",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "class plant_process:\n",
    "    def __init__(self, alpha):\n",
    "        self.value = 0 \n",
    "        self.alpha = alpha\n",
    "\n",
    "    def __call__(self, output):\n",
    "        self.value -= (self.value * self.alpha)\n",
    "        self.value += output \n",
    "        return round(self.value)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eae5d7b7-b1d1-4baa-a291-df0b1228a956",
   "metadata": {},
   "source": [
    "The next cell implements a generator that takes a `pid` implementation, a generator object for $r(t)$ and a function (or callable) for $y(t)$ as input. The function generates tuples of ($u(t)$, $y(t)$)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "926cc963-f562-49ab-80bc-b327b1dd15c9",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "def simulate(pid, setpoint, plant):\n",
    "    output = 0\n",
    "    for sp in setpoint:\n",
    "        feedback = plant(output)\n",
    "        output = pid.step(sp, feedback)\n",
    "        yield output, feedback"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "58a98989-385a-4ba2-ab04-0035838f0d5a",
   "metadata": {},
   "source": [
    "## Performance Against the Reference\n",
    "\n",
    "This code tests a selected controller against the reference controller. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c2651f45-a5b8-4923-9159-6ae9218e2b29",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "e69f9da0eb074ec695254b2fac5b7ac1",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "interactive(children=(Dropdown(description='obits', options=(16, 8, 1), value=16), Checkbox(value=True, descri…"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "@interact(p=(0,1,0.01), i=(0,1,0.01), d=(0,1,0.01), obits=[16,8,1], osign=True, n=(10,200,10), pid=['FastPID', 'ArduinoPID', 'AutoPID'])\n",
    "def do_reference_fun(obits, osign, pid, p, i, d, n,):\n",
    "\n",
    "    dut = eval(pid)\n",
    "    dut.configure(p, i, d, obits, osign)\n",
    "    ref = refpid.refpid(p, i, d, obits, osign)\n",
    "\n",
    "    setpoint = [0, 0] + ([1000] * (n-2)) + ([-1000] * (n-2))\n",
    "\n",
    "    reference = np.fromiter(simulate(ref, setpoint, plant_process(0.2)), dtype=np.dtype((int, 2)))\n",
    "    output = np.fromiter(simulate(dut, setpoint, plant_process(0.2)), dtype=np.dtype((int, 2)))\n",
    "\n",
    "    setline = plt.plot(setpoint, '', label='Setpoint')\n",
    "    refline = plt.plot(reference[:,1], '--', label='Reference')\n",
    "    outline = plt.plot(output[:,1], '', label=pid)\n",
    "    plt.legend(['Setpoint r(t)', 'Reference y(t)', f\"{pid} y(t)\"])\n",
    "    plt.xlabel('Time (Steps)')\n",
    "    plt.ylabel('Codes')\n",
    "    plt.title('{} vs. Reference (p={} i={} d={})'.format(pid, p, i, d))\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d54e208d-ba52-4edb-b856-7d5e0ffb7ce4",
   "metadata": {
    "tags": []
   },
   "source": [
    "## Testing the Parameter Domain\n",
    "\n",
    "In FastPID the parameters are scaled from floats to integers to make the math faster. Configuring FastPID returns a boolean to indicate if there was an error that would cause the operation of the controller to fail. Because the logic is complicated, the next cell demonstrates the domain of the parameters based on search."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0cd37f63-b895-45e4-9e0e-4164629c483c",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The largest valid parameter: 256\n",
      "The smallest valid parameter: 0.00390625\n"
     ]
    }
   ],
   "source": [
    "\n",
    "kp = 1\n",
    "while FastPID.configure(kp-1,0,0,16,False) :\n",
    "    okay = kp\n",
    "    kp *= 2\n",
    "print (f'The largest valid parameter: {okay}')\n",
    "\n",
    "kp = 1\n",
    "while FastPID.configure(kp,0,0,16,False) :\n",
    "    okay = kp\n",
    "    kp /= 2\n",
    "print (f'The smallest valid parameter: {okay}')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a50eba20-b088-4240-86cd-13ed05bc269e",
   "metadata": {},
   "source": [
    "## AutoPID Has a Broken `D` Parameter \n",
    "\n",
    "The `AutoPID` doesn't seem to respond to changes in `D`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "0fa6cdff-4742-4444-ae64-41fc9d668cd3",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlUAAAHFCAYAAADbiAxsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAACWVElEQVR4nOzdd3hUVfrA8e+dmh5SSKMFpBeVIhBcBZQqyNpAFjeAiyAiIlJWsYHsCj+sKNhFqZbVFVcREVCsdDAIgqBIDyEhvU+7vz8mMxDSJmEmk0zez/PMY3Ln3HPfG2Ly5pxz36OoqqoihBBCCCEui8bbAQghhBBC+AJJqoQQQggh3ECSKiGEEEIIN5CkSgghhBDCDSSpEkIIIYRwA0mqhBBCCCHcQJIqIYQQQgg3kKRKCCGEEMINJKkSQgghhHADSaqE8JCXX34ZRVHo3LnzZfe1fv165s2bd1l99OvXD0VRnC9/f3+uuuoqFi9ejM1mc7YbP348QUFBFZ6r0WgIDg6mdevWjBw5ko8//rjU+b7g22+/LfW1MhgMNG7cmGuvvZbHHnuMEydOVKu/H374AaPRWO3zLpfZbOapp54iPj4eo9FI+/btWbJkiUvn5ubm8s9//pNBgwbRuHFjFEWp1vfgvHnzUBSlhpGXtXnzZhISEggICCAyMpLx48eTmppa5Xlnz57l8ccfJyEhgcjISEJCQujevTtvvvkmVqu1VNtly5bRpEkT8vPz3Ra3aFgkqRLCQ9555x0Afv31V3bs2HFZfa1fv56nnnrqsmNq1aoV27ZtY9u2bXz44Yc0adKEhx56iDlz5rh87tatW/n000955JFHKCwsZOTIkfTr14/s7OzLjq+uWbBgAdu2bWPLli0sW7aMfv368c4779ChQwfWrFnjUh+qqjJ9+nQmTpxIixYtPBxxaVOmTGHhwoXcf//9fPXVV9x66608+OCDLFiwoMpz09PTefPNNykuLuaWW26p9rXvuecetm3bVoOoy/ruu+8YOnQo0dHR/O9//+Oll15i8+bN3HjjjRQXF1d67p49e1i5ciU33ngjK1eu5L///S99+/blvvvuY+LEiaXajhs3jsDAQJ555hm3xC0aIFUI4Xa7du1SAXXYsGEqoE6cOPGy+rv//vvVy/3ftW/fvmqnTp1KHTOZTGqrVq3UgIAA1WQyqaqqquPGjVMDAwOrPNfhnXfeUQF11KhRlxVfbcvPz6/wvS1btqiA+tFHH5V5Lz09Xe3atauq0+nUX375pcrrrF+/XgXU33777bLira4DBw6oiqKoCxYsKHV84sSJqr+/v5qenl7p+TabTbXZbKqqqmpaWpoKqHPnzvVUuJW65ppr1I4dO6pms9l57KefflIB9dVXX6303IyMDOf39sUc/0+dPHmy1PHnnntODQ0NrfT7Q4iKyEiVEB6wbNkyAP7v//6PPn368MEHH1BQUFCqjWOK6dtvvy11/Pjx4yiKwvLlywH7dNwrr7wCUGpK6vjx4wAUFRUxZ84cWrZsicFgoEmTJtx///1kZWVVGader6d79+4UFBSQlpZWo3u9++67uemmm/joo49cmt565513uOqqq/Dz8yM8PJxbb72VQ4cOOd9fvHgxiqLwxx9/lDn34YcfxmAwcP78eecxx4hFSEgIAQEBXHvttXz99delznNMRe3du5c77riDsLAwrrjiihrdb3h4OG+88QYWi4UXX3yxyvavvfYa11xzDe3atSt1PD4+nuHDh7N27VquvPJK/Pz8aNWqFS+//HKN4rrUp59+iqqq3H333aWO33333RQWFrJhw4ZKz3d8n9WUu6b/zpw5w65du0hMTESn0zmP9+nTh7Zt27J27dpKzw8LC0Ov15c53rNnTwBOnz5d6vhdd91FTk4OH3zwwWXHLhoeSaqEcLPCwkLef/99rrnmGjp37sw//vEPcnNz+eijj2rU3xNPPMEdd9wB4Jy627ZtG7Gxsaiqyi233MJzzz1HYmIiX3zxBTNmzGDFihXccMMNVU6NABw9ehSdTkdYWFiN4gMYMWIEqqryww8/VNpu4cKFTJgwgU6dOvHJJ5/w0ksv8csvv5CQkMDvv/8OwN///ncMBoMzqXSwWq2sXr2am2++mcjISABWr17NoEGDCAkJYcWKFfznP/8hPDycwYMHl0msAG677TZat27NRx99xOuvv17j+73mmmuIjY3l+++/r7SdyWRi8+bN9O/fv9z3k5KSmD59Og899BBr166lT58+PPjggzz33HOl2lksFpdeqqo6zzlw4ACNGzcmJiamVF9XXnml8/3aZrPZXLqPi9c6OeJ0xH2xK6+8ssb38c0336DT6Wjbtm2p4zExMbRv354vvviiRv2KBs67A2VC+J6VK1eqgPr666+rqqqqubm5alBQkHrdddeVaueYYtqyZUup48eOHVMB9d1333Ueq2j6b8OGDSqgPvPMM6WOf/jhhyqgvvnmm85jjik8s9msms1mNTk5WX3kkUdUQB05cqSzXXWn/1RVVb/88ksVUBctWlRhm8zMTNXf31+96aabSh0/efKkajQa1TFjxjiP3XbbbWrTpk1Vq9XqPOaYRvv8889VVbVP34WHh6s333xzqf6sVqt61VVXqT179nQemzt3rgqoTz75ZIXxXayy6T+HXr16qf7+/pX2s2PHDhVQP/jggzLvtWjRQlUURU1KSip1fODAgWpISEip6SfApdfF3zMDBw5U27VrV25cBoNBnTRpUqWxX6wm03+Or/nFxo0b59J99O3b13nOmjVrVEDdtm1bmWtMmjRJNRgMLsfk8NVXX6kajUZ96KGHyn3/rrvuUqOjo6vdrxAXxlKFEG6xbNky/P39GT16NABBQUGMHDmSd999l99//502bdq47VrffPMNYJ8ivNjIkSP5xz/+wddff11qMe6vv/5aaipEr9dz1113OacXa0q9aISkItu2baOwsLBMrM2aNeOGG24oNbJ0991388knn7B582YGDRoEwLvvvktMTAxDhw4FYOvWrWRkZDBu3DgsFkupPocMGcIzzzxDfn4+gYGBzuO33357TW+xDFfuOTk5GYCoqKhy3+/UqRNXXXVVqWNjxoxh06ZN7N27l7/85S8A7Nq1y6WYWrZsWerzyqbf3PlknqvmzZvH1KlTq2wXHBxc5lhF8Vb3Pvbu3cuoUaPo3bs3CxcuLLdNVFQUqampWCyWUlOOQlRFvluEcKM//viD77//nttvvx1VVZ3rmu644w7effdd3nnnnQp/kNdEeno6Op2Oxo0blzquKAoxMTGkp6eXOn7FFVfwwQcfoCgKfn5+tGzZkoCAgMuOw7GWKi4urtJYAWJjY8u8FxcXx6ZNm5yfDx06lNjYWN59910GDRpEZmYmn332GQ8++CBarRaAc+fOATinRsuTkZFRKqkq79o1dfLkyUrvF+xTwQB+fn7lvn/p1NzFxy7+t7v66qtdisnxtQGIiIggKSmpTJv8/HxMJhPh4eEu9elOzZs3p2nTplW2uzhRioiIACjzvQz2f9/q3MfPP//MwIEDadOmDevXr8doNJbbzs/PD1VVKSoqKlNeRIjKyJoqIdzonXfeQVVVPv74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D4Dly5fz1FNPsW/fPudDW46RJUVReO211xg6dCj+/v60bNmSjz76qFQM+/fv54YbbsDf35+IiAgmTZpEXl6e8/3x48dzyy23OD/v168f06ZN45///Cfh4eHExMQwb9485/vx8fEA3HrrrSiK4vz8UsePH0dRFP7zn//Qr18//Pz8WL16NTabjY8++ogRI0aUuuaJEyd46KGHnPfoMGLECHbu3Mmff/5ZnS+9W/hUUnWp2NhYWrRowe+//w5ATEwMJpOJzMzMUu1SU1OJjo52tjl37lyZvtLS0pxtLmU0GgkJCSn1aij+8+gjWNV0wEqhKYXPX365JLna7O3QhBCiFFVVKTBZvPJSVdWlGIOCgggKCuLTTz91zrKUdx/Dhg0jJSWF9evXs2fPHrp168aNN95IRkYGd955JzNnzqRTp07Oh7buvPNO5/lPPPGEczTs73//O3/72984dOgQAAUFBQwZMoSwsDB27drFRx99xObNm5k6dWqlca9YsYLAwEB27NjBM888w/z589m0aRMAu3btAuDdd9/l7Nmzzs8r8vDDDzNt2jQOHTrE4MGD+eWXX8jKyqJHjx7ONp988glNmzZl/vz5znt0aNGiBVFRUfzwww+VXscT6tVC9epKT0/n1KlTxMbGAtC9e3f0ej2bNm1i1KhRAJw9e5YDBw7wzDPPAJCQkEB2djY7d+6kZ8+eAOzYsYPs7Gz69OnjnRupowpzsklNtiegBm0UVpsZq5pZklwtJWLNJ4x/9VUvRymEEHaFZisdn/zKK9c+OH8wAYaqf+XqdDqWL1/OxIkTef311+nWrRt9+/Zl9OjRXHnllQBs2bKF/fv3k5qaitFoBOC5557j008/5eOPP2bSpEkEBQWh0+nKfXBr5MiR3HPPPQD861//YtOmTSxZsoRXX32VNWvWUFhYyMqVKwkMDATsU28333wzixYtqnBw4corr2Tu3LkAtGnThqVLl/L1118zcOBAGjduDECjRo0qfJDsYtOnT+e2225zfr5z5060Wm2ppTnh4eFotVqCg4PL7bNJkyYcP368ymu5W70aqcrLyyMpKYmkpCQAjh07RlJSEidPniQvL49Zs2axbds2jh8/zrfffsvNN99MZGQkt956K2CfB54wYQIzZ87k66+/5ueff+bvf/87Xbp0cT4N2KFDB4YMGcLEiRPZvn0727dvZ+LE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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n = 50\n",
    "obits = 16\n",
    "osign = True \n",
    "p = 0.1\n",
    "i = 0.2\n",
    "d = 0.0\n",
    "\n",
    "setpoint = [0, 0] + ([1000] * (n-2)) + ([-1000] * (n-2))\n",
    "legend = [\"Setpoint r(t)\"]\n",
    "plt.plot(setpoint, '', label='Setpoint')\n",
    "\n",
    "for d in range(0,5):\n",
    "    d /= 10\n",
    "    AutoPID.configure(p, i, d, obits, osign)\n",
    "    output = np.fromiter(simulate(AutoPID, setpoint, plant_process(0.2)), dtype=np.dtype((int, 2)))\n",
    "    plt.plot(output[:,1], '', label=f'd={d}')\n",
    "    legend += [f\"d={d}\"]\n",
    "    \n",
    "plt.legend(legend)\n",
    "plt.xlabel('Time (Steps)')\n",
    "plt.ylabel('Codes')\n",
    "plt.title(f'AutoPID over D (p={p} i={i})')\n",
    "\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
